package demo4

import (
	"fmt"
)

/*
	多个类型可以实现相同的接口
	1. 一个接口的方法，不一定需要由一个类型完全实现，接口的方法可以通过在类型中嵌入其他类型或者结构体来实现
	2. 使用者并不关心某个接口的方法是通过一个类型完全实现的，还是通过多个结构嵌入到一个结构体中拼凑起来共同实现的。
*/

// 一个服务需要满足能够开启和写日志的功能
type service interface {
	start()     // 开启服务
	log(string) // 日志输出
}

// 日志器
type logger struct{}

// 实现Service的Log()方法
func (g *logger) log(l string) {
	fmt.Println(l)
}

//  游戏服务
type gameService struct {
	logger // 嵌入日志器
}

// 实现Service的Start()方法
func (g *gameService) start() {
}

// TestDemo44 多个类型可以实现相同的接口
func TestDemo44() {
	var s service = new(gameService)

	s.start()

	s.log("Hello")
}
